home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 426-450 / disk_431 / ezasm / ezasm.doc < prev    next >
Text File  |  1992-05-06  |  20KB  |  931 lines

  1.  
  2.  
  3.     EZAsm    Version 1.31        December '90   by Joe Siebenmann
  4.  
  5.  
  6.     DISCLAIMER:
  7.  
  8.     You have the right to freely use, copy and distribute this program
  9.     as long as the following conditions are met:
  10.  
  11.     1.  The program and documentation are not modified in any way.
  12.     2.  The program is not used or included in any package for profit
  13.         unless written consent from the author is obtained.
  14.  
  15.     NOTE: The author does not accept any responsibility for any damage
  16.         that might result from the use of this program.
  17.  
  18.  
  19.  
  20.     EZAsm was written to make programming in 68000 assembly language
  21.         much easier, for both assembly language programmers, and
  22.         those who may be interested in using the speed and compact
  23.         code that assembly language provides for a project.
  24.         EZAsm  combines parts of the "C" language with 68000
  25.         assembly, giving it the "feel" of a higher level language. 
  26.         The resulting code is optimized as much as possible.
  27.  
  28.  
  29.  
  30. Here are some of its advantages:
  31.  
  32.  
  33. -    It always converts your statement into the fastest possible
  34.         assembly statement(s), so you automatically write
  35.         "good" code.
  36.  
  37. -    More structured.  Compare, and bit test statements can have
  38.         braces and "else" like "C".  Being able to use braces lets
  39.         you use assembly in a whole new way!
  40.  
  41. -    "C" like Amiga function calls!  Every 1.3 function in every
  42.         library is supported.  An XREF table is automatically
  43.         built and inserted.
  44.  
  45. -    Makes code MUCH more readable, for debugging etc.    
  46.  
  47. -    Enables you to code nearly TWICE as fast, with fewer syntax errors.
  48.  
  49. -    No more having to constantly look up which condition code to    
  50.         use for compares, bit tests, or maximum numbers for
  51.         "moveq" or "addq" etc.
  52.  
  53. -    You can insert normal assembly statements anywhere, for your
  54.         special needs.
  55.  
  56.  
  57.  
  58.     You need to know a little about assembly language, and "C"
  59.         operators, before you dive right in.  If you're new to
  60.         68000 assembly language, I suggest looking at one of the
  61.         many available books on the subject.  The included example
  62.         source programs can give you a good idea about:
  63.  
  64.  
  65. -    General statement syntax.
  66.  
  67. -    Use of the additional arguments, to "force" size etc.
  68.  
  69. -    Using assembly statements in your code.
  70.  
  71.  
  72. ****************************************    
  73.  
  74. Using EZAsm:
  75.  
  76.  
  77.  
  78. EZAsm filename.s
  79.  
  80.  
  81. Where filename is the name of your source file including any path.
  82.     Give your source file an extension ( .s etc. ) or your
  83.     linker will overwrite it.
  84.  
  85. It produces an output file called filename.asm .
  86.  
  87. Be sure the files "funcnm" & "funcdat" are in the same directory
  88.     as EZAsm.  Cd into this directory and you're ready to go.
  89.  
  90. Depending on which assembler you use on the final output file,
  91.     you may need to change the extension from .asm to .a or make minor
  92.     changes or additions to your source.  The code section has been made
  93.     as compatible as possible.  If your assembler complains, it's
  94.     typically something in the data section.
  95.  
  96.     Manx:   as scroll.asm
  97.             ln scroll.o -lc
  98.  
  99.  
  100.  
  101. *********************************
  102. *        Operand  Table         *
  103. *********************************
  104.  
  105.               Operand Type
  106.  
  107. Mode     [A] [B] [C] [D] [E] [F]
  108.  
  109. Dn        *   *   *   -   *   -
  110. An        *   -   *   -   -   -
  111. (An)      *   *   *   *   *   *
  112. (An)+     *   *   *   *   *   *
  113. -(An)     *   *   *   *   *   *
  114. d(An)     *   *   *   *   *   *
  115. d(An,Xn)  *   *   *   *   *   *
  116. abs.w     *   *   *   *   *   *
  117. abs.l     *   *   *   *   *   *
  118. d(PC)     *   -   -   -   *   *
  119. d(PC,Xn)  *   -   -   -   *   *
  120. d (immed) *   -   -   -   -   -
  121.  
  122.  
  123. declared variables:
  124.  
  125. "foo"  becomes  "foo(a5)"  ( d(An) )
  126.  
  127.  
  128. examples:
  129.  
  130. abs.w:  ($1f40)
  131.         (1024)
  132.         CLR_PUB     *1
  133.  
  134.  
  135. abs.l:  ($bfe001)
  136.         (12574721)
  137.         Max         *1
  138.  
  139.  
  140. d (immd):  $dff000
  141.            -1
  142.            512
  143.  
  144.  
  145. *1  Where these have been previously defined as "CLR_PUB  equ  $10001" etc.
  146.  
  147. **************************************
  148.  
  149.       ( decimal or hex )
  150.  
  151. #<1>   1 - 8
  152. #<2>   0 - 7
  153. #<3>   0 - 31
  154. #<4>   -128 - 127
  155. #<any>   any byte, word, or long size number
  156.  
  157.  
  158. Dn     d0 - d7
  159. An     a0 - a7
  160.  
  161.  
  162. {B}    B (byte) data size not allowed for An operands
  163.  
  164.  
  165. *****************************************
  166. *    legal     *  converted   *  legal  *
  167. *   operands   *     to       *  sizes  *
  168. *****************************************
  169.  
  170. Addition  Subtraction
  171.  
  172. ++
  173. --
  174.  
  175.     [C]         addq/subq       L,W,{B}
  176.  
  177. +=
  178. -=
  179.     
  180.     Dn   [A]    add/sub         L,W,B        
  181.  
  182.     [D]  Dn     add/sub         L,W,B
  183.  
  184.     An   [A]    adda/suba       L,W
  185.     
  186.     [B]  #<any> addi/subi       L,W,B        
  187.     
  188.     [C]  #<1>   addq/subq       L,W,{B}    
  189.  
  190.  
  191. Examples:
  192.  
  193.     Total ++    
  194.     d1 += 10
  195.  
  196. Optional Args:
  197.  
  198.     l, w, b 
  199.  
  200. **********************************
  201.  
  202. Multiplication   Division
  203.  
  204.  
  205. *=
  206. /=
  207.  
  208.     Dn  [E]     divu/mulu (default)   W
  209.     
  210.     Dn  [E]  s  divs/muls             W
  211.  
  212.  
  213.     ( SPECIAL:  Where # is a byte or word length number. ( higher could  
  214.         overshift the result )  The resulting code is larger then "mulu"
  215.         or "muls" but will execute much faster.
  216.         ( it will default to a normal "mulu" or "muls"
  217.         if the number isn't "right" ) )
  218.  
  219.  
  220.     Dn *= #                           L
  221.  
  222.  
  223. Examples:
  224.  
  225.     d0 *= d1
  226.     d2 /= 2
  227.  
  228. Optional Args:
  229.  
  230.     w (default), s        
  231.  
  232. **********************************
  233.  
  234. And   Or   Exclusive Or
  235.  
  236.  
  237. &=
  238. |=
  239.  
  240.     [B]  #<any>     andi/ori        L,W,B    
  241.     
  242.     Dn   [E]        and/or          L,W,B
  243.     
  244.     [D]  Dn         and/or          L,W,B
  245.  
  246.  
  247. x=
  248.  
  249.     [B]  Dn         eor             L,W,B    
  250.     
  251.     [B]  #<any>     eori            L,W,B
  252.  
  253.  
  254. Examples:
  255.  
  256.     Mask &= %11010000
  257.     Flags |= $f0
  258.  
  259. Optional Args:
  260.  
  261.     l, w, b 
  262.  
  263. ***********************************
  264.  
  265. Shift  Left/Right
  266.  
  267.  
  268. <<
  269. >>
  270.  
  271.     Dn   Dn     lsl/lsr         L,W,B
  272.     
  273.     Dn   1-8    lsl/lsr         L,W,B
  274.     
  275.     [D]  1      lsl/lsr         L,W,B
  276.  
  277.              a  asl/asr
  278.  
  279.  
  280.     ( SPECIAL:  Normally you're limited to 1-8 and must use a
  281.         data register to hold higher.  In this statement  
  282.         the output is optimized, so it's faster, and saves
  283.         using a data register!  ( logical only ) )
  284.  
  285.  
  286.     Dn   1-31                   L
  287.  
  288.  
  289.  
  290. Examples:
  291.  
  292.     d2 << d0
  293.     d1 >> 4
  294.  
  295. Optional Args:
  296.  
  297.     l, w, b, a
  298.     ( logical is default )
  299.     
  300. ***********************************
  301.  
  302. Assign
  303.  
  304.  
  305. =    
  306.  
  307.     [B]  [A]    move            L,W,{B}
  308.     
  309.     An   [A]    movea           L,W
  310.     
  311.     Dn   #<4>   moveq           L
  312.  
  313.  
  314. Examples:
  315.  
  316.     temp = Total
  317.     (a1)+ = 0 w
  318.  
  319. Optional Args:
  320.  
  321.     l, w, b 
  322.  
  323. ***********************************
  324.  
  325. Compare
  326.  
  327.  
  328. >=
  329. <=
  330. !=
  331. >
  332. <
  333. =
  334.  
  335.     Dn    [A]      cmp          L,W,{B}
  336.     
  337.     An    [A]      cmpa         L,W
  338.     
  339.     [B]   #<any>   cmpi         L,W,B
  340.     
  341.     (An)+ (An)+    cmpm         L,W,B
  342.  
  343.  
  344.  
  345. Syntax types:
  346.  
  347.  
  348.     [opr] [op] [opr]   label
  349.  
  350.  
  351.  
  352.     [opr] [op] [opr]   {
  353.         .
  354.         .
  355.     }
  356.  
  357.  
  358.  
  359.     [opr] [op] [opr]   {
  360.         .
  361.         .
  362.     
  363.     } else {
  364.         .
  365.         .
  366.     }
  367.  
  368.  
  369. Example:
  370.  
  371.     Total >= 100 Over
  372.  
  373.  
  374. Optional Args: ( placed AFTER label or brace )
  375.  
  376.     l, w, b, s
  377.  
  378. ********************************************
  379.  
  380. Bit test
  381.  
  382.  
  383.  
  384.     Dn:0-31  =  0-1 label    btst.l     L
  385.     
  386.     Dn:Dn    =  0-1 label               L
  387.     
  388.     
  389.     [F]:0-7  =  0-1 label    btst.b     B    
  390.     
  391.     [F]:Dn   =  0-1 label               B
  392.  
  393.     
  394. ( You can also use braces "{" instead of a label, see
  395.     compare for use of braces )
  396.  
  397.  
  398. Examples:
  399.  
  400.     d1:0 = 1 CalcRtn
  401.  
  402.     ($bfe001):6 = 0 LMBDown
  403.  
  404.     d2:d0 = 1 ItsSet 
  405.  
  406.  
  407. Optional Args:
  408.  
  409.     ( ignored )
  410.     
  411. Rules:
  412.  
  413. -    No spaces inside first operand.
  414.  
  415. -    Only "=" is allowed.
  416.  
  417. -    Right operand can only be 0 or 1.
  418.  
  419.  
  420. ****************************************
  421.  
  422. Additional Arguments:
  423.  
  424.  
  425. b   forces operation to be byte
  426.  
  427. w     "       "        "   word
  428.  
  429. l     "       "        "   long
  430.  
  431. a    arithmetic shift       ( <<, >> )       ( logical is default )
  432.  
  433. s    signed                 ( *=, /= , compares )
  434.  
  435.  
  436. ( these are RESERVED and can't be used as variables, or labels
  437.     ( unless you use upper case ) ) 
  438.  
  439. ******************************************************
  440.  
  441. Functions:
  442.  
  443.  
  444. Syntax types:
  445.  
  446.     CloseWindow( Window )
  447.  
  448.     Buf = AllocMem( 512 $10001 )
  449.  
  450.     Permit( )
  451.  
  452.  
  453.  
  454. Example:
  455.  
  456. --------------------------------
  457.  
  458. dosname        dc.b    "dos.library",0
  459. fname        dc.b    "df0:myfile",0
  460.  
  461. CLEAR_PUBLIC equ    $10001
  462. OLD          equ    1005
  463.  
  464.  
  465. LONG    _DosBase FHandle num Rbuf 
  466.  
  467.  
  468.         _DosBase = OpenLibrary( #dosname 0 ) 
  469.         beq     Exit
  470.  
  471.         Rbuf = AllocMem( 100 #CLEAR_PUBLIC )
  472.         beq  Exit
  473.  
  474.         FHandle = Open( #fname #OLD )                 
  475.         beq  Exit
  476.  
  477.         d3 = 100    ; preload D3   *1
  478.         num = Read( d0 Rbuf * )
  479.  
  480.             .
  481.             .
  482.             .
  483.  
  484.  
  485.  
  486. *1   normally you wouldn't need to do this, it's only an example..
  487.  
  488. ---------------------------------
  489.  
  490.  
  491. -    You must first do an OpenLibrary( ) to access functions in
  492.         a library.  Functions in ConsoleDevice are accessed 
  493.         differently.  See the ConsoleDevice section in the RKM p 662.
  494.         ( load the io_Device field into "_ConBase" )
  495.         Functions in ExecBase are always accessible and don't
  496.         need to be opened.
  497.         The library bases MUST be named:
  498.  
  499.     _ConBase
  500.     _DiskfontBase
  501.     _DosBase
  502.     _ExpansionBase
  503.     _GfxBase
  504.     _IconBase
  505.     _IntuitionBase
  506.     _LayersBase
  507.     _MathBase
  508.     _MathIeeeDoubBasBase
  509.     _MathIeeeDoubTransBase
  510.     _MathTransBase
  511.     _PotgoBase
  512.     _RomBootBase
  513.     _TimerBase
  514.     _TranslatorBase
  515.  
  516.  
  517.  
  518. -    Unfortunately the leading underscores are necessary so you can use
  519.         includes without your assembler complaining.  Some library
  520.         bases ( IntuitionBase, ExecBase, GfxBase, ExpansionBase,
  521.         RomBootBase ) are already defined in some .i's resulting in
  522.         "multiply defined symbol" errors.
  523.  
  524. -    You might notice that ExecBase is missing.  It isn't needed.
  525.         ( it's loaded with "movea.l $4,a6" )
  526.  
  527.  
  528.                    Permit( )
  529.               OpenLibrary( #dosname 0 )
  530.                         ^ ^          ^
  531.                no space | | space    | space
  532.  
  533. -    The function name must be followed immediately with "(" ( no
  534.         spaces between ) and then followed by a space or tab.
  535.         If the function has no arguments, it still needs a space in
  536.         the middle.  Arguments must be separated with a space or tab.
  537.  
  538.  
  539. Arguments:
  540.  
  541. -    If your argument is already in a DIFFERENT data or address register,
  542.         you can pass it as an argument.  Often a previous function
  543.         will put results in D0, so just pass d0.  If the proper
  544.         register is already loaded just pass "*".
  545.         The above example shows both of these.
  546.  
  547.         ( if you pass it the same register it uses, it'll be skipped.
  548.         func defined as:  Lock( D1 D2 )  "Flock = Lock( d1 -2 )"
  549.         arg "d1" will be skipped )
  550.  
  551.  
  552. -    If you need a pointer to a newwindow, filename, library name, etc.
  553.         use "#dosname" etc. like the example above. It'll load its
  554.         address ( pointer ) into a data or address register.
  555.  
  556.  
  557.     All functions within these ( 1.3 ) libraries are supported:
  558.  
  559.         ConsoleDevice
  560.         DiskfontBase        
  561.         DOSBase
  562.         ExecBase  ( SysBase )
  563.         ExpansionBase
  564.         GfxBase
  565.         IconBase
  566.         IntuitionBase
  567.         LayersBase
  568.         MathBase
  569.         MathIeeeDouBasBase
  570.         MathIeeeDoubTransBase
  571.         MathTransBase
  572.         PotgoBase
  573.         RomBootBase
  574.         TimerBase
  575.         TranslatorBase
  576.  
  577.  
  578. -    It keeps track of the current library base.  As long as no user
  579.         labels, or close braces ("}") are hit, it will not re-load
  580.         the base register for functions which have the same
  581.         library base.
  582.  
  583. -    The file "funcnm" contains a list of every function that is
  584.         supported.
  585.  
  586. **************************************************
  587.  
  588. Optimizations:
  589.  
  590.  
  591.   STATEMENT          BECOMES        NOTE
  592.  
  593.  
  594.    An = 0          sub.l An,An
  595.  
  596.    [B] = 0         clr [B]          1
  597.  
  598.  
  599.  ( compares )
  600.  
  601.    [B] = 0
  602.    [B] != 0        tst [B]
  603.                    bcc label
  604.  
  605.    ----------------------------------
  606.  
  607.    [B] += #
  608.    [B] -= #
  609.  
  610.    [B] &= #   
  611.    [B] |= #
  612.    [B] x= #
  613.  
  614.    [B] = #         moveq   #,d7     2
  615.                    [opr].l d7,[B]
  616.  
  617.  
  618.    ( compares )
  619.  
  620.    dn .. # label   moveq   #,d7     2
  621.                    cmp.l   d7,dn
  622.                    bcc     label
  623.  
  624.    an .. # label   moveq   #,d7     2
  625.                    cmpa.l  d7,an
  626.                    bcc     label
  627.  
  628.    ----------------------------------
  629.  
  630.    Dn << 1-31
  631.    Dn >> 1-31                       3, 2
  632.  
  633.    An += #1        lea  n(An),An
  634.    An -= #1        lea  -n(An),An   4, 2
  635.  
  636.    An = #2         lea  n,An        5, 2
  637.  
  638.    Dn *= #1                         6
  639.  
  640.    
  641.  
  642. # = 1-127    ( #<4> if appropriate )
  643.  
  644. #1 = any byte or word length number
  645.  
  646. #2 = any byte, word, or long length number
  647.  
  648.  
  649.  
  650. Notes:
  651.  
  652. 1    For byte and word sizes the code size is smaller, for long,
  653.         its smaller and faster. ( then "move #0,[B]" )            
  654.  
  655. 2    Only apply to long sized operations.
  656.  
  657. 3    The resulting instructions are combinations of "swap", "clr.w",
  658.         "add.l", "lsr" or "lsl".
  659.  
  660. 4    ( 1-8 handled by "addq", "subq" )
  661.  
  662. 5    ( 0 handled by "sub.l An,An" )
  663.  
  664. 6    The resulting instructions are combinations of "move.l", "asl.l", 
  665.         "asr.l", "add.l".        
  666.  
  667.  
  668. ********************************************
  669.  
  670. General Info:
  671.  
  672.  
  673. -    Statements can be indented as you like.  Operands, operator,
  674.         and arguments must be separated by at least one space or tab. 
  675.  
  676. -    Braces can be nested up to 30 deep.
  677.     
  678. -    Only one statement per line.
  679.  
  680. -    If you declare variables or use function call's, the first statement
  681.         in your code must be an "EZAsm statement" so it knows when
  682.         to insert the XREF's and/or get stack frame for the
  683.         variables.  ( comments or assembly directives placed between
  684.         your variables and the start of your code will be
  685.         out of place in the output file )
  686.  
  687. -    Comments at 1st column must begin with "*" or ";".  Comments after
  688.         statements must be begin with ";" and be separated from last
  689.         argument, or operand.
  690.         ( both types are transferred to output file ( some may not ))
  691.  
  692. -    Operands supported: octal: @141  hex: $61  binary: %1100001
  693.         ASCII: 'a' and decimal: 97   ASCII strings in operands
  694.         can contain a maximum of 4 characters.
  695.         ( no quotes within quotes permitted )    
  696.  
  697. -    To make labels and symbols as compatible as possible, they arn't
  698.         checked for illegal characters.  Typically the 1st character
  699.         must be a letter, underscore "_", or a period "." .
  700.         The rest of the characters can be any of these plus 0-9.
  701.  
  702. -    Labels and symbols can have an unlimited length.  ( check your
  703.         assembler to find what length they are significant to
  704.         ( usually around 30 ) )
  705.  
  706. -    Labels that don't begin at column 1 should be followed immediately
  707.         with ":".
  708.  
  709. -    Local labels ( "2$   d1 = 0" ) are supported.
  710.  
  711. -    No need to put in the usual "moveq #0,d0", "rts" at the end of your
  712.         code, its part of the closing block of code it inserts to
  713.         free the variables.
  714.  
  715. -    D7 is used as a scratch register for some optimizations, so be
  716.         careful if you use it.
  717.  
  718. -    Labels that it generates for braces are in the range
  719.         ".laaa" to ".lzzz" so try to avoid using them.
  720.         ( upper case is OK )
  721.  
  722. -    "SP", "PC", "CCR", "SR" & "USP" are supported, but you must ensure
  723.         the size is legal as no checks are made.
  724.         ( must be upper case )
  725.  
  726. -    For best viewing of output file set your tabs to 8 spaces.
  727.         ( printing should be fine )
  728.  
  729.  
  730. IMPORTANT! :
  731.  
  732. Use of register A5 is RESERVED!
  733.  
  734. ( it contains the base address for variable storage )
  735.  
  736.  
  737. ********************************
  738.  
  739. Variable Declaration:
  740.  
  741.  
  742. LONG    foo Save[10] bar ...
  743. WORD    DMASave ...
  744. BYTE    Sw ...
  745.  
  746.  
  747. -    "xxx[n]" reserves n consecutive blocks of given size, with
  748.         "xxx" pointing to 1st byte.
  749.  
  750. -    You're limited to 14 variables per line.
  751.  
  752. -    No other statement types may occur between these lines.
  753.  
  754. -    Variables must be separated by at least one space, or tab.
  755.  
  756. -    To keep things word aligned, if an odd number of bytes are    
  757.         declared in BYTE, an extra byte will be added.  This
  758.         will offset the next "equ" by one.
  759.         ( in the case of "BYTE    Count foo buf[3]" ( 5 bytes )
  760.         an extra would be added )
  761.  
  762. -    Variables are stored on the stack, and are not cleared.
  763.         Be sure to properly initialize them.  
  764.  
  765. -    Any number of these can be used, in any order.    
  766.  
  767. -    Must occur JUST BEFORE your program code.
  768.  
  769. -    Must begin at 1st column, with LONG, WORD, or BYTE in upper case.
  770.  
  771.  
  772. ************************************************
  773.  
  774. How to get what you need, hints, etc.:
  775.  
  776.  
  777. -    Using "ENDS":    Its safer to put all your data AFTER your code
  778.         so it can't accidentally be executed when it runs.
  779.         To do this, put "ENDS" ( END Source ) after your code,
  780.         ( signals the closing block of code to free the variables
  781.         to be output ) and "END" at the very bottom.  "END" must
  782.         allways be at the bottom.
  783.         ( see the example source "window.s" which uses this )
  784.  
  785. -    Instruction size:    In most cases you won't need
  786.         a size argument.  It knows the size of the variables,
  787.         address and data registers, and is smart enough to know
  788.         what size to use.  It determines the size of data by it's
  789.         actual value not its physical size.
  790.         ( $0020  %11010000  $12  125  are all BYTE size )
  791.         If the data is smaller than the instruction size you want,
  792.         ( d1 = $20 w ) or it can't know an operands size
  793.         ( (a2)+ = 3(a0) l ) you'll need to give it a size argument.
  794.  
  795.         Caution:
  796.  
  797.             Be aware that if you load small variables into larger
  798.             ones, the upper bytes will not be cleared and may
  799.             garbage your result.
  800.  
  801.  
  802. -    Since "(a1)" refers to the CONTENTS of the byte, word, or long
  803.         that a1 points to, "($dff180)" is used in a similar way.
  804.         "move.w  $dff01e,d0" would become, "d0 = ($dff01e) w".
  805.         ( decimal addr's are also valid: "(4)", "(256)" )
  806.  
  807. -    When numbers are used as operands "$fe02" or "37", they are
  808.         converted to "#$fe02", "#37".  ( when "$2f(a2)" or "15(a0)"
  809.         are used, they are left AS IS ( see below ))
  810.  
  811. -    Operands that it DOESN'T RECOGNIZE, doesn't match with any
  812.         declared LONG, WORD, BYTE, or standard "(a1)+" etc., get
  813.         output AS IS.  This is VERY USEFUL when you need operands
  814.         like: "#intuiname", "wd_UserPort(a1)", "$20(a1)", "DMACON(a6)"
  815.  
  816. -    Most statements set condition code flags on the result of the
  817.         operation.  Often, instead of using a compare to check the
  818.         result, you can use an assembly instruction, branching on
  819.         the state of a condition code flag! ( you need to check
  820.         what flags are set ( if any ) for an instruction )
  821.  
  822. -    If at any time you're unsure of what a statement is being
  823.         output as, or want to check something out, just look
  824.         at the output file.
  825.  
  826. -    I think it's a good idea to get away from using include files.
  827.         It speeds up the assembler tremendously.  Most assembly
  828.         source files I see do this.
  829.  
  830.  
  831. ****************************************
  832.  
  833. Errors:
  834.  
  835.  
  836. "Illegal argument"
  837.  
  838.     The argument found was not valid for the operator.  See
  839.     the list of "Optional Args" for the operator.  It must
  840.     be lower case, and be separated from the operands
  841.     by at least a space or a tab.
  842.     
  843. "Illegal operand"
  844.  
  845.     One, or both, of the operands are:  not valid for the operator,
  846.     have an invalid number, or byte size was specified for an
  847.     "An" operand {B}.  In most cases it's looking for "Dn" or "An"
  848.     as one of the operands.  ( look under the "legal operands"
  849.     of the operator for a valid combination )
  850.  
  851. "Illegal size"
  852.  
  853.     The argument size you specified is not valid for the operator.    
  854.     Check the "legal sizes" for the operator.
  855.     
  856. "Needs size argument"    
  857.  
  858.     It doesn't have enough size information about the operands to
  859.     calculate an instruction size.
  860.     You need to add an l, w, or b argument.
  861.  
  862. "Label not found"
  863.  
  864.     No label matching your label argument was found.    
  865.  
  866. "Brace mismatch"
  867.  
  868.     Checks are made when a closing brace ( "}" ) is hit, and when "END"
  869.     is hit.  If the brace stack is "messed up" at that time, an error 
  870.     is given.  If "}" is shown, look from there up.  Both "}" and "END"
  871.     may appear.  If just "END", look for a "{" or "} else {" without a
  872.     matching "}".
  873.  
  874. "Function not found"
  875.  
  876.     No function matching your function name was found.  Check case and    
  877.     spelling of function name, and be sure there isn't a space before
  878.     the "(".  Check the list of supported function names in the
  879.     file "funcnm".
  880.  
  881. "Function argument count incorrect"
  882.  
  883.     Check the number of arguments you used for the function.  Too many
  884.     or not enough were used.
  885.  
  886.  
  887. *******************************************************************
  888. *******************************************************************
  889.  
  890. Changes for 1.31 :
  891.  
  892. o    New "funcdat". ( same size )
  893.  
  894. o    Instruction size logic has been improved, now with no
  895.     warnings.  Variable's "equ"'s have been changed.
  896.  
  897. o    Use of "$fffffffe" etc. now optimized for "moveq".
  898.  
  899.  
  900.  
  901.  
  902.     I hope you find this program useful.  If you have any ideas for
  903.         improvements, bugs, or something you'd like to see in a
  904.         future version, I would appreciate hearing from you!
  905.  
  906.  
  907. I can be contacted at:
  908.  
  909.  
  910. ( till around spring of '91 )
  911.  
  912. Joe Siebenmann
  913. 8303 Old Tree Ct.
  914. Springfield, VA  22153
  915. (703) 455-4982
  916.  
  917.  
  918. ( anytime )
  919.  
  920. PLINK:    IGZ798
  921.  
  922.  
  923.  
  924. Happy Programming!
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.